package com.js.lib_common.http;


import com.js.lib_common.mvp.model.CommonBean;
import com.js.lib_common.mvp.model.response.LoginResponse;
import com.js.lib_common.mvp.model.response.MachineIdInfoResponse;
import com.js.lib_common.mvp.model.response.MaterialIdInfoResponse;
import com.js.lib_common.mvp.model.response.ProcessInfoInfoResponse;
import com.js.lib_common.mvp.model.response.ProdyctInfoResponse;

import java.util.List;

import io.reactivex.Observable;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.POST;

/**
 * Created by wz on 2019/5/17.
 */
public interface ApiStores {
    //baseUrl
//    String API_SERVER_URL = "http://192.168.10.177:1234/";

    String BASE = "/production-trace/";

    /**
     * 登录
     */
    @FormUrlEncoded
    @POST(BASE + "clientController/login")
    Observable<CommonBean<LoginResponse>> login(@Field("account") String account, @Field("password") String password);


    /**
     * 整机id： /clientController/getMachineIdInfo
     *
     * @param userId    用户id
     * @param machineId 生产任务单导出的整机id，18位，前5位为所属产品代码
     * @return
     */
    @FormUrlEncoded
    @POST(BASE + "clientController/getMachineIdInfo")
    Observable<CommonBean<MachineIdInfoResponse>> checkMachineId(@Field("userId") String userId,
                                                                 @Field("machineId") String machineId);

    /**
     * 物料编码： /clientController/getMaterialIdInfo
     *
     * @param userId     用户id
     * @param materialId 采购单下单物料导出的物料id，以WL开头
     * @return
     */
    @FormUrlEncoded
    @POST(BASE + "clientController/getMaterialIdInfo")
    Observable<CommonBean<MaterialIdInfoResponse>> checkMaterialId(@Field("userId") String userId,
                                                                   @Field("materialId") String materialId);

    /**
     * 工序编码：/clientController/getProcessCodeInfo
     *
     * @param userId      用户id
     * @param processCode 工序编码
     * @return
     */
    @FormUrlEncoded
    @POST(BASE + "clientController/getProcessCodeInfo")
    Observable<CommonBean<ProcessInfoInfoResponse>> checkProcessCode(@Field("userId") String userId,
                                                                     @Field("processCode") String processCode);


    /**
     * 绑定接口： /clientController/bindCode
     * 绑定接口不会判断传入的Id或编码是否存在于系统中，也不包含判断物料Id所属的物料编码是否在工序使用物料编码中的逻辑，因此调用前需要先调用对应的信息获取接口获取数据进行判断
     * 传入多个物料id时，只要有一个id不符合绑定要求，则所有物料id均不会绑定
     * 多个物料id的绑定错误信息通过英文分号“;”分隔
     *
     * @param userId
     * @param machineID   整机Id
     * @param materialIDs 物料id字符串，用英文逗号分隔
     * @param processCode 工序编码
     * @return
     */
    @FormUrlEncoded
    @POST(BASE + "clientController/bindCode")
    Observable<CommonBean> bind(@Field("userId") String userId,
                                @Field("machineID") String machineID,
                                @Field(value = "materialIDs",encoded = true) String materialIDs,
                                @Field("processCode") String processCode,
                                @Field("bindType") int bindType);


    /**
     * 物件测试接口： /clientController/saveTestData
     *
     * @param userId     用户id
     * @param itemId     物件Id， 可以为物料id或整机id
     * @param isPassTest 是否通过测试 0未通过 1通过
     * @param remark     测试信息 非必填
     * @return
     */
    @FormUrlEncoded
    @POST(BASE + "clientController/saveTestData")
    Observable<CommonBean> check(@Field("userId") String userId,
                                 @Field("itemId") String itemId,
                                 @Field("isPassTest") int isPassTest,
                                 @Field("remark") String remark);

    /**
     * 整机id入库接口: /clientController/storeMachineByIds
     *
     * @param userId     用户id
     * @param machineIds 需要入库的整机id，用英文逗号分隔+ 多个物料id的入库错误信息通过英文分号“;”分隔
     * @return
     */
    @FormUrlEncoded
    @POST(BASE + "clientController/storeMachineByIds")
    Observable<CommonBean> checkIn(@Field("userId") String userId,
                                   @Field("machineIds") String machineIds);

    /**
     * 单个整机id出库接口: /clientController/sendMachineById
     *
     * @param userId     用户id
     * @param machineIds 整机Id
     * @param clientCode 客户提供的绑定编码，非必填
     * @return
     */
    @FormUrlEncoded
    @POST(BASE + "clientController/sendMachineById")
    Observable<CommonBean> checkOut(@Field("userId") String userId,
                                    @Field("machineId") String machineIds,
                                    @Field("clientCode") String clientCode);



    /**
     * 有产品及其工序
     *
     * @param userId    用户id
     * @return
     */
    @FormUrlEncoded
    @POST(BASE + "clientController/getAllProductInfo")
    Observable<CommonBean<List<ProdyctInfoResponse>>> getAllProductInfo(@Field("userId") String userId);

}





